package com.spsoft.einvoicetodmz.service;

import com.spsoft.core.model.Result;
import com.spsoft.core.model.leqidmz.param.*;
import com.spsoft.core.model.leqidmz.param.collect.*;
import com.spsoft.core.model.leqidmz.response.*;
import com.spsoft.core.model.leqidmz.response.collect.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

/**
 * OpenFeign调用DMZ接口
 *
 * @author : chenxudong
 * @date : 2024/1/25 9:22
 */
@FeignClient(url = "${dmz.url}", path = "/dmzeinvoice", name = "dmzFeignService")
public interface DmzFeignService {

    //=====发票基础能力模拟数据=====
    /**
     * 查询纳税人企业基本信息
     */
    @PostMapping(path = "/baseInfo/queryEnterpriseInfo")
    Result<QueryEnterpriseInfoVO> queryEnterpriseInfo(@RequestBody BaseNsrRequestParams params);

    /**
     * 查询纳税人风险信息
     */
    @PostMapping(path = "/baseInfo/queryEnterpriseRisk")
    Result<QueryEnterpriseInfoRiskVO> queryEnterpriseRisk(@RequestBody BaseNsrRequestParams params);

    /**
     * 查询纳税人分类编码信息
     */
    @PostMapping(path = "/baseInfo/queryClassifyCode")
    Result<QueryClassifyCodeVO> queryClassifyCode(@RequestBody QueryClassifyCodeParams params);

    /**
     * 查询可用税率信息
     */
    @PostMapping(path = "/baseInfo/queryAvalibleTaxRate")
    Result<QueryAvalibleTaxRateVo> queryAvalibleTaxRate(@RequestBody BaseNsrRequestParams params);

    /**
     * 查询授信额度
     */
    @PostMapping(path = "/baseInfo/queryCreditLimit")
    Result<QueryCreditlimitVO> queryCreditLimit(@RequestBody BaseNsrRequestParams params);

    /**
     * 调整授信额度有效期
     */
    @PostMapping(path = "/baseInfo/queryCreditPeriod")
    Result<QueryCreditPeriodVO> queryCreditPeriod(@RequestBody QueryCreditPeriodParams params);

    /**
     * 下载/退回授信额度
     */
    @PostMapping(path = "/baseInfo/applyCredit")
    Result<ApplyCreditVO> applyCredit(@RequestBody ApplyCreditParams params);

    /**
     * 获取数电票批量预赋码信息
     */
    @PostMapping(path = "/baseInfo/assignedCode")
    Result<AssignedCodeResponseVO> assignedCode(@RequestBody AssignedCodeParams params);

    /**
     * 查询差额征税编码信息
     */
    @PostMapping(path = "/baseInfo/queryDifferentialTaxCode")
    Result<QueryDifferentialTaxationVO> queryDifferentialTaxCode(@RequestBody BaseUserInfoParam params);


    /**
     * 数电票上传
     */
    @PostMapping(path = "/invoice/uploadInvoice")
    Result<UploadInvoiceVO> uploadInvoice(@RequestBody UploadInvoiceParamDto uploadDto);

    /**
     * 查询数电票上传结果
     */
    @PostMapping(path = "/invoice/queryUploadInvoiceStatus")
    Result<QueryUploadInvoiceStatusVO> queryUploadInvoiceStatus(@RequestBody QueryUploadInvoiceStatusParam params);

    /**
     * 上传发票汇总确认信息
     */
    @PostMapping(path = "/invoice/uploadInvoiceSummary")
    Result<BaseResponseVO> uploadInvoiceSummary(@RequestBody UploadInvoiceSummaryParam params);

    /**
     * 查询发票汇总确认信息
     */
    @PostMapping(path = "/invoice/queryUploadInvoiceSummary")
    Result<QueryUploadInvoiceSummaryVO> queryUploadInvoiceSummary(@RequestBody QueryUploadInvoiceSummaryParam params);

    /**
     * 数电红字确认单申请
     */
    @PostMapping(path = "/redInvoice/applyRedConfirm")
    Result<ApplyRedConfirmVO> applyRedConfirm(@RequestBody ApplyRedConfirmDetailParam params);

    /**
     * 数电红字确认单确认
     */
    @PostMapping(path = "/redInvoice/confirmRedConfirm")
    Result<ConfirmRedConfirmVO> confirmRedConfirm(@RequestBody ConfirmRedConfirmParam params);

    /**
     * 查询数电红字确认单明细
     */
    @PostMapping(path = "/redInvoice/queryRedConfirmDetail")
    Result<QueryRedConfirmDetailVO> queryRedConfirmDetail(@RequestBody QueryRedConfirmDetailParam params);

    /**
     * 查询数电红字确认单列表
     */
    @PostMapping(path = "/redInvoice/queryRedConfirmList")
    Result<QueryRedConfirmListVO> queryRedConfirmList(@RequestBody QueryRedConfirmListParam params);


    //=====发票归集能力模拟数据=====
    /**
     * 批量发票下载申请
     */
    @PostMapping(path = "/collect/batchLoadInvoice")
    Result<BatchLoadInvoiceVO> batchLoadInvoice(@RequestBody BatchLoadInvoiceParam params);

    /**
     * 批量发票下载申请反馈
     */
    @PostMapping(path = "/collect/batchLoadInvoiceFeedback")
    Result<BatchLoadInvoiceFeedbackVO> batchLoadInvoiceFeedback(@RequestBody BatchLoadInvoiceFeedbackParam params);

    /**
     * 查询增量下载发票信息
     */
    @PostMapping(path = "/collect/incLoadInvoiceQuery")
    Result<IncLoadInvoiceQueryVO> incLoadInvoiceQuery(@RequestBody IncLoadInvoiceQueryParam params);

    /**
     * 发票风险信息查询
     */
    @PostMapping(path = "/collect/invoiceRiskQuery")
    Result<InvoiceRiskQueryVO> invoiceRiskQuery(@RequestBody InvoiceRiskQueryParam params);

    /**
     * 发票用途状态信息查询
     */
    @PostMapping(path = "/collect/invoiceUsedStatusQuery")
    Result<InvoiceUsedStatusQueryVO> invoiceUsedStatusQuery(@RequestBody InvoiceUsedStatusQueryParam params);

}
